package hos.file.media;

import android.os.Environment;



/**
 * <p>Title: FileType </p>
 * <p>Description:  </p>
 * <p>Company: www.mapuni.com </p>
 *
 * @author : 蔡俊峰
 * @version : 1.0
 * @date : 2024-03-13 22:50
 */
public class FileType {

    public static String[] getFileTypeReal(Type[] input) {
        if (input == null || input.length == 0) {
            return null;
        }
        String[] types = new String[input.length];
        for (int i = 0; i < input.length; i++) {
            types[i] = input[i].getType();
        }
        return types;
    }

    /**
     * 根据文件的路径获取文件的类型String
     *
     * @param filePath 文件地址
     * @return 文件类型
     */
    public static Type getFileType(String filePath) {
        if (isFileType(filePath, Type.AUDIO)) {
            return Type.AUDIO;
        } else if (isFileType(filePath, Type.IMAGE)) {
            return Type.IMAGE;
        } else if (isFileType(filePath, Type.PDF)) {
            return Type.PDF;
        } else if (isFileType(filePath, Type.TXT)) {
            return Type.TXT;
        } else if (isFileType(filePath, Type.AUDIO)) {
            return Type.AUDIO;
        } else if (isFileType(filePath, Type.VIDEO)) {
            return Type.VIDEO;
        } else if (isFileType(filePath, Type.CHM)) {
            return Type.CHM;
        } else if (isFileType(filePath, Type.WORD)) {
            return Type.WORD;
        } else if (isFileType(filePath, Type.EXCEL)) {
            return Type.EXCEL;
        } else if (isFileType(filePath, Type.PPT)) {
            return Type.PPT;
        } else if (isFileType(filePath, Type.APK)) {
            return Type.APK;
        }
        return Type.ALL;
    }

    /**
     * 判断是否为音频的文件
     */
    public static boolean isAUDIO( String fileName) {
        return fileName.toLowerCase().endsWith(".m4a") || fileName.toLowerCase().endsWith(".mp3")
                || fileName.toLowerCase().endsWith(".mid") || fileName.endsWith(".wav")
                || fileName.toLowerCase().endsWith(".xmf") || fileName.toLowerCase().endsWith(".ogg")
                || fileName.toLowerCase().endsWith(".aac");
    }

    /**
     * 判断是否为视频的文件
     */
    public static boolean isVIDEO( String fileName) {
        return fileName.toLowerCase().endsWith(".mts")
                || fileName.toLowerCase().endsWith(".mp4") || fileName.toLowerCase().endsWith(".avi")
                || fileName.toLowerCase().endsWith(".wmv") || fileName.toLowerCase().endsWith(".3gp")
                || fileName.toLowerCase().endsWith(".flv") || fileName.toLowerCase().endsWith(".f4v");
    }

    /**
     * 判断是否为图片的文件
     */
    public static boolean isIMAGE( String fileName) {
        return fileName.toLowerCase().endsWith(".jpg") || fileName.toLowerCase().endsWith(".gif")
                || fileName.toLowerCase().endsWith(".png") || fileName.toLowerCase().endsWith(".jpeg")
                || fileName.toLowerCase().endsWith(".bmp");
    }

    /**
     * 判断是否为表格的文件
     */
    public static boolean isEXCEL( String fileName) {
        return fileName.toLowerCase().endsWith(".xls") || fileName.toLowerCase().endsWith(".xlsx");
    }

    /**
     * 判断是否为Word的文件
     */
    public static boolean isWORD( String fileName) {
        return fileName.toLowerCase().endsWith(".doc") || fileName.toLowerCase().endsWith(".chm")
                || fileName.toLowerCase().endsWith(".docx");
    }

    /**
     * 判断是否为文本的文件
     */
    public static boolean isTXT( String fileName) {
        return fileName.toLowerCase().endsWith(".txt");
    }

    /**
     * 判断是否为Pdf的文件
     */
    public static boolean isPDF( String fileName) {
        return fileName.toLowerCase().endsWith(".pdf");
    }

    /**
     * 判断是否为PPT的文件
     */
    public static boolean isPPT( String fileName) {
        return fileName.toLowerCase().endsWith(".ppt") || fileName.toLowerCase().endsWith(".dps");
    }

    /**
     * 判断是否为APK的文件
     */
    public static boolean isAPK( String fileName) {
        return fileName.toLowerCase().endsWith(".apk");
    }

    /**
     * 判断是否为html的文件
     */
    public static boolean isHTML( String fileName) {
        return fileName.toLowerCase().endsWith(".html");
    }

    /**
     * 判断是否为指定类型的文件
     */
    public static boolean isFileType(String fileName, Type type) {
        if (Type.AUDIO.equals(type)
                && isAUDIO(fileName)) {
            return true;
        } else if (Type.VIDEO.equals(type)
                && isVIDEO(fileName)) {
            return true;
        } else if (Type.IMAGE.equals(type)
                && isIMAGE(fileName)) {
            return true;
        } else if (Type.EXCEL.equals(type)
                && isEXCEL(fileName)) {
            return true;
        } else if (Type.TXT.equals(type) && isTXT(fileName)) {
            return true;
        } else if (Type.WORD.equals(type)
                && isWORD(fileName)) {
            return true;
        } else if (Type.PDF.equals(type) && isPDF(fileName)) {
            return true;
        } else if (Type.PPT.equals(type)
                && (isPPT(fileName))) {
            return true;
        } else if (Type.APK.equals(type) && isAPK(fileName)) {
            return true;
        } else return Type.HTML.equals(type) && isHTML(fileName);
    }

    /**
     * 判断两字符串忽略大小写是否相等
     *
     * @param a 待校验字符串a
     * @param b 待校验字符串b
     * @return {@code true}: 相等<br>{@code false}: 不相等
     */
    private static boolean equalsIgnoreCase(final String a, final String b) {
        return a == null ? b == null : a.equalsIgnoreCase(b);
    }

    public static String getFilePathString(String fileName) {
        if (isFileType(fileName, Type.AUDIO)) {
            return "audio";
        } else if (isFileType(fileName, Type.IMAGE)) {
            return "image";
        } else if (isFileType(fileName, Type.PDF)) {
            return "pdf";
        } else if (isFileType(fileName, Type.TXT)) {
            return "txt";
        } else if (isFileType(fileName, Type.VIDEO)) {
            return "video";
        } else if (isFileType(fileName, Type.CHM)) {
            return "chm";
        } else if (isFileType(fileName, Type.WORD)) {
            return "word";
        } else if (isFileType(fileName, Type.EXCEL)) {
            return "excel";
        } else if (isFileType(fileName, Type.PPT)) {
            return "ppt";
        } else if (isFileType(fileName, Type.APK)) {
            return "apk";
        }
        return "file";
    }

    public enum Type {

        HTML("text/html", "html"),
        IMAGE("image/*", Environment.DIRECTORY_PICTURES),
        PDF("application/pdf", "pdf"),
        TXT("text/plain", "txt"),
        AUDIO("audio/*", Environment.DIRECTORY_MUSIC),
        VIDEO("video/*", Environment.DIRECTORY_MOVIES),
        CHM("application/x-chm", "chm"),
        WORD("application/msword", "word"), EXCEL("application/vnd.ms-excel", "excel"),
        PPT("application/vnd.ms-powerpoint", "ppt"),
        APK("application/vnd.android.package-archive", "apk"),
        ALL("*/*", "file");

        private final String type;

        public String getType() {
            return type;
        }

        private final String dir;

        public String getDir() {
            return dir;
        }


        Type(String type, String dir) {
            this.type = type;
            this.dir = dir;
        }
    }

}
